import { _decorator, Component, director, instantiate, Node, Prefab, Vec3 } from 'cc';
import { Bullet_1 } from './Bullet_1';
const { ccclass, property } = _decorator;

@ccclass('BulletTest')
export class BulletTest extends Component {
    @property(Prefab)
    BulletPrefab: Prefab = null;

    private bulletNode: Node | null = null;

    start() {
        // 在开始时创建子弹实例
        this.createBullet();
    }

    update(deltaTime: number) {
        // 每帧更新子弹位置
        if (this.bulletNode) {
            this.updateBulletPosition(deltaTime);
        }
    }

    private createBullet() {
        if (this.BulletPrefab && this.node) {
            // 实例化子弹预制体
            this.bulletNode = instantiate(this.BulletPrefab);
            director.getScene().addChild(this.bulletNode);
            const bulletComponent = this.bulletNode.getComponent(Bullet_1);
            if (bulletComponent) {
                // 设置子弹的初始位置
                this.bulletNode.setPosition(this.node.getPosition());
            }
        }
    }

    private updateBulletPosition(deltaTime: number) {
        if (this.bulletNode) {
            // 获取目标位置
            const targetPosition = this.getTargetPosition();
            // 计算子弹与目标之间的方向
            const direction = targetPosition.subtract(this.bulletNode.getPosition()).normalize();
            // 更新子弹位置
            this.bulletNode.setPosition(this.bulletNode.getPosition().add(direction.multiplyScalar(this.bulletNode.getComponent(Bullet_1).bullet_1_Speed* deltaTime)));
            // 检查是否到达目标
            const distance = this.getDistance(this.bulletNode.getPosition(), targetPosition);
            if (distance < 10) {
                this.hitTarget();
            }
        }
    }

    private getTargetPosition(): Vec3 {
        // 这里需要实现获取目标位置的逻辑
        // 例如，可以是场景中的一个特定节点
        return new Vec3(500, 500, 0); // 示例位置
    }

    private getDistance(pos1: Vec3, pos2: Vec3): number {
        const dx = pos1.x - pos2.x;
        const dy = pos1.y - pos2.y;
        const dz = pos1.z - pos2.z;
        return Math.sqrt(dx * dx + dy * dy + dz * dz);
    }

    private hitTarget() {
        // 处理命中逻辑，例如销毁子弹
        if (this.bulletNode) {
            this.bulletNode.destroy();
        }
        // 这里可以添加命中目标的逻辑
        console.log("Hit the target!");
    }
}